function deepClone(obj, des = {}) {
  const toStr = Object.prototype.toString
  const hasOwn = Object.prototype.hasOwnProperty
  for (let i in obj) {
    if (hasOwn.call(obj, i)) {
      if (typeof obj[i] === 'object') {
        des[i] = toStr.call(obj[i]) === '[object Array]' ? [] : {}
        deepClone(obj[i], des[i])
      } else {
        des[i] = obj[i]
      }
    }
  }
  return des
}
